package test2;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;

public class Home03ServerA {

    ServerSocket serverSocket;
    public Home03ServerA(int port) throws Exception {
        serverSocket = new ServerSocket(port);//创建一个指定端口号
        Socket socket = serverSocket.accept();
        start(socket);
    }
    public void start(Socket socket) throws Exception {
        //查找包含该关键字的文件
        try (BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
        BufferedInputStream bis = new BufferedInputStream(socket.getInputStream())) {
            InputStreamReader isr = new InputStreamReader(bis);
            BufferedReader br = new BufferedReader(isr);
            //接受传过来的歌名,转化成字符串
            String name = UtilAPi.streamToString(br);
            System.out.println(name);
            ArrayList<File> array = lookUp(name);
            if(!array.isEmpty()){
                for (File file: array) {
                    //返回文件名

                    if(file.isFile()){
                        //用于标记是否结束
                        bos.write(1);
                        //如果是普通文件再进行下面的操作
                      //  bos.flush();
                        if(file.getName().equals(name)){
                            byte[] ArrayName = file.getName().getBytes(StandardCharsets.UTF_8);
                            bos.write(ArrayName);
                           // bos.flush();
                            //如果名字一样就返回该文件
                          byte[]b = UtilAPi.getByteArray(new FileInputStream(file));//获取二进制数组
                            //将该文件返回
                            bos.write(b);
                           // bos.flush();
                        }
                    }
                }
            }
            //如果返回的是-1就说明结束了
            bos.write(-1);
            //bos.flush();
            System.out.println(socket.getInetAddress().getHostName()+"/"+socket.getPort()+" 结束");
        }
    }


    private ArrayList<File> lookUp(String request) {
        //创建一个读取文件的流
        //从这个目录中查找
        File file = new File("D:\\music");
        ArrayList<File> arrayList = new ArrayList<>();
        if(file.isDirectory()){
            //如果是目录就遍历这个目录里的所有文件名
            File[] files = file.listFiles();
            assert files != null;
            for (File n:files) {
               if(n.isFile()){
                   //如果找到就加入这个数组
                   //只要包含就加入
                   if(n.getName().contains(request)){
                       arrayList.add(n);
                   }
               }
            }
        }
        return arrayList;
    }

    /**
     * 读取文件,查找音乐,这个是服务器
     */

    public static void main(String[] args) throws Exception {
        Home03ServerA serverA = new Home03ServerA(9999);


    }
}
